// *** LICENSE HEADER ***
// Filename: ./logger.cpp
// This file is part of Nodewarz 0.1
// Nodewarz is a 3d OpenGL strategy game
// Copyright (C) 2007 CZestmyr
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
// *** END LICENSE HEADER ***
#include "logger.h"

logger::logger(const char* newLogFileName) {
    logFile.open(newLogFileName, std::ios_base::out | std::ios_base::app);
    if (!logFile) return;
    outputWhat = LL_INFORMATION | LL_WARNING | LL_ERROR;
    //If debug is set, output debug messages as well
#ifdef _DEBUG
    outputWhat = outputWhat | LL_DEBUG;
#endif
    logFile << std::endl;
    log(LL_INFORMATION, "Opened log file");
}

logger::~logger() {
    if (logFile)
        log(LL_INFORMATION, "Closing log file");
    logFile.close();
}

void logger::log(logLevel messageLevel, const char* message) {
    if (!logFile) return;
    if (outputWhat & messageLevel) {
        //Log the message level
        switch (messageLevel) {
            case LL_INFORMATION:
                logFile << "-I- ";
                break;
            case LL_WARNING:
                logFile << "-W- ";
                break;
            case LL_ERROR:
                logFile << "!E! ";
                break;
            case LL_DEBUG:
                logFile << "DBG ";
                break;
        }
        currentTime = time(NULL);
        strftime(buffer, 32, "%c: ", localtime(&currentTime));
        //Log the message time and the message itself, followed by a newline
        logFile << buffer;
        logFile << message << std::endl;
    }
}

void logger::changeLogLevel(logLevel newLogLevel) {
    outputWhat = newLogLevel;
}
